package com.lostfound.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lostfound.entity.LostFoundItem;
import com.lostfound.mapper.LostFoundItemMapper;
import com.lostfound.service.LostFoundItemService;
import org.springframework.stereotype.Service;
import cn.hutool.core.util.StrUtil;

import java.util.List;

/**
 * 失物招领信息 - 服务实现类
 * 
 * @author 学生姓名
 * @description 业务逻辑层实现类，实现具体的业务逻辑
 */
@Service  // 标识这是一个Spring服务类
public class LostFoundItemServiceImpl extends ServiceImpl<LostFoundItemMapper, LostFoundItem> 
        implements LostFoundItemService {

    /**
     * 查询所有失物招领信息（支持按类型和状态筛选）
     */
    @Override
    public List<LostFoundItem> getList(Integer itemType, Integer status) {
        // 构建查询条件
        LambdaQueryWrapper<LostFoundItem> wrapper = new LambdaQueryWrapper<>();
        
        // 如果传入了类型参数，则添加类型筛选条件
        if (itemType != null) {
            wrapper.eq(LostFoundItem::getItemType, itemType);
        }
        
        // 如果传入了状态参数，则添加状态筛选条件
        if (status != null) {
            wrapper.eq(LostFoundItem::getStatus, status);
        }
        
        // 按创建时间倒序排列（最新发布的在前面）
        wrapper.orderByDesc(LostFoundItem::getCreateTime);
        
        // 执行查询
        return this.list(wrapper);
    }

    /**
     * 根据关键词搜索
     */
    @Override
    public List<LostFoundItem> searchByKeyword(String keyword) {
        // 如果关键词为空，返回所有数据
        if (StrUtil.isBlank(keyword)) {
            return this.list();
        }
        
        // 构建模糊查询条件（搜索物品名称或物品描述）
        LambdaQueryWrapper<LostFoundItem> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(LostFoundItem::getItemName, keyword)
               .or()
               .like(LostFoundItem::getItemDesc, keyword);
        
        // 按创建时间倒序排列
        wrapper.orderByDesc(LostFoundItem::getCreateTime);
        
        return this.list(wrapper);
    }

    /**
     * 发布失物招领信息
     */
    @Override
    public boolean publish(LostFoundItem item) {
        // 设置初始状态为进行中
        if (item.getStatus() == null) {
            item.setStatus(0);
        }
        
        // 调用MyBatisPlus的save方法插入数据
        return this.save(item);
    }

    /**
     * 更新失物招领信息
     */
    @Override
    public boolean update(LostFoundItem item) {
        // 调用MyBatisPlus的updateById方法更新数据
        return this.updateById(item);
    }

    /**
     * 标记为已完成
     */
    @Override
    public boolean markAsCompleted(Long id) {
        // 创建更新对象，只更新状态字段
        LostFoundItem item = new LostFoundItem();
        item.setId(id);
        item.setStatus(1);  // 1表示已完成
        
        return this.updateById(item);
    }

    /**
     * 删除失物招领信息（逻辑删除）
     */
    @Override
    public boolean delete(Long id) {
        // MyBatisPlus的removeById会执行逻辑删除（因为实体类有@TableLogic注解）
        return this.removeById(id);
    }
}



